Hướng dẫn xây dựng truyện "chọn đường đi của riêng bạn" — người xem quyết định cốt truyện qua từng lựa chọn, dẫn đến nhiều kết cục khác nhau.
Giới thiệu dự án
Truyện tương tác nhiều nhánh (branching narrative) là thể loại người đọc không chỉ xem mà còn quyết định chuyện gì xảy ra tiếp theo. Mỗi lựa chọn mở ra một nhánh cốt truyện — có thể dẫn đến kết thúc vui, buồn hoặc bất ngờ.
Dự án lớp 8 kết hợp kể chuyện sáng tạo với broadcast, biến và điều kiện
Mở đầu→Lựa chọn A / B→Cảnh 2a hoặc 2b→Lựa chọn tiếp→Kết cục 1 / 2 / 3…
Phác thảo
Vẽ sơ đồ câu chuyện trước khi code
Broadcast
Chuyển cảnh bằng thông báo giữa các sprite
Nút lựa chọn
Sprite clickable thay cho người xem bấm chọn
Biến trạng thái
Theo dõi màn chuyện và điểm đạo đức
💡 Ghi nhớ
Thời gian ước tính: 3–5 giờ. Bắt đầu với 2 lựa chọn × 2 cấp (tối đa 4 kết cục), sau đó mở rộng thêm nhánh khi đã chạy ổn.
Bước 1: Lên kế hoạch câu chuyện
Trước khi mở Scratch
Đừng code ngay — hãy phác thảo trên giấy:
Chủ đề: phiêu lưu, bí ẩn, đời thường, khoa học viễn tưởng…
Nhân vật chính: 1–2 sprite có nhiều trang phục (biểu cảm).
Các cảnh (scene): mỗi cảnh = một phông nền + đoạn thoại + 2 (hoặc 3) lựa chọn.
Sơ đồ nhánh: vẽ mũi tên từ mỗi lựa chọn đến cảnh tiếp theo và đến kết cục.
Đặt tên broadcast: thống nhất tên thông báo — ví dụ chon_rung, chon_lang, ket_thuc_tot.
📌 Ví dụ cốt lõi
"Bạn thức dậy trong căn phòng lạ. Cửa sổ hé mở — bạn chọn nhảy ra cửa sổ hay mở cửa chính?"
Cửa sổ → rơi vào vườn → gặp người lạ → kết A hoặc B
Cửa chính → hành lang tối → tìm chìa khóa → kết C hoặc D
Bước 2: Thiết kế phông nền và nhân vật
Nghệ thuật & sprite
Vẽ hoặc chọn phông nền cho từng cảnh — đặt tên rõ: Cảnh_1_Phong, Cảnh_2_Vuon…
Sprite narrator / nhân vật dùng khối nói hoặc nghĩ để kể thoại.
Tạo sprite nút lựa chọn — hình chữ nhật có chữ "Đi vào rừng", "Về làng"… Mỗi nút là một sprite riêng để dễ gắn script click.
Khối chuyển phông nền, nói, hiện/ẩn nằm trong nhóm Giao diện
💡 Ghi nhớ
Ban đầu ẩn tất cả nút lựa chọn. Chỉ hiện đúng cặp nút của cảnh hiện tại — tránh người xem bấm nhầm lựa chọn cảnh khác.
Bước 3: Dùng broadcast chuyển cảnh
Thông báo giữa các phần
Broadcast (phát thông báo) gửi một "tín hiệu" tới toàn bộ sprite và sân khấu. Khi người chơi bấm nút, nút đó phát thông báo; script khi nhận trên Stage hoặc nhân vật sẽ chạy — đổi phông nền, ẩn nút cũ, hiện nút mới.
Khối "phát thông báo" và "khi nhận được" nằm trong nhóm Sự kiện
Trên sprite nút "Đi rừng"
khi nhấn vào nhân vật này phát thông báo [chon_rung v] ẩn
Trên Stage (sân khấu)
khi nhận được [chon_rung v] chuyển sang phông nền [Cảnh_Rung v] phát thông báo [hien_lua_chon_rung v]
Tách đổi phông nền và hiện nút mới bằng hai broadcast liên tiếp giúp script gọn và dễ sửa từng phần.
Bước 4: Biến theo dõi tiến trình
Trạng thái câu chuyện
Biến giúp Scratch "nhớ" người chơi đang ở đâu và đã chọn gì — đặc biệt hữu ích khi có nhiều kết cục phụ thuộc tổng điểm lựa chọn.
Tạo biến màn, điểm_tin_cậy hoặc số_lựa_chọn cho toàn sân khấu
khi nhấn cờ xanh đặt [màn v] thành [1] đặt [điểm_tin_cậy v] thành [0]
khi nhận được [chon_giup_nguoi v] thay đổi [điểm_tin_cậy v] thêm [10] thay đổi [màn v] thêm [1]
📌 Kết cục theo điểm
Cuối truyện, kiểm tra:
điểm_tin_cậy ≥ 20 → phát ket_tot — nhân vật được cứu.
điểm_tin_cậy < 20 → phát ket_buon — nhân vật đi lạc.
Bước 5: Quản lý nút lựa chọn
Hiện / ẩn thông minh
Mỗi nhóm nút gắn với một cảnh. Khi vào cảnh mới:
Ẩn tất cả nút (broadcast an_het_nut → mỗi nút khi nhận được → ẩn).
Hiện chỉ nút của cảnh đó (broadcast hien_nut_canh_2 → nút A, B hiện).
khi nhận được [bat_dau v] chuyển sang phông nền [Cảnh_1 v] phát thông báo [an_het_nut v] đợi [0.3] giây phát thông báo [hien_nut_canh_1 v]
khi nhận được [hien_nut_canh_1 v]// trên sprite Nút A hiện
⚠️ Quan trọng
Tên thông báo phải khớp chính xác giữa khối phát và khi nhận được — kể cả dấu cách và chữ hoa/thường.
Bước 6: Thoại và âm thanh
Kể chuyện sinh động
Gắn đoạn thoại vào broadcast của từng cảnh — trên sprite nhân vật:
khi nhận được [chon_rung v] nói [Bạn bước vào rừng tối...] trong [3] giây chuyển sang trang phục [lo_lang v] phát tiếng [gió v]
Dùng đợi … giây hoặc đợi đến khi khối nói xong trước khi hiện nút — người xem kịp đọc hết thoại trước khi chọn.
📌 Thay thế nút bằng hỏi đáp
Dùng hỏi … và đợi + trả lời cho câu hỏi mở: "Bạn muốn đi đâu?" So sánh trả lời với "rừng" hoặc "làng" bằng khối chứa — phù hợp truyện ít nhánh, nhập liệu tự do.
Bước 7: Nhiều kết cục
Điểm cao trào
Mỗi kết cục là một cảnh riêng: phông nền khác, thoại kết, không còn nút lựa chọn (hoặc chỉ nút "Chơi lại").
khi nhận được [ket_tot v] chuyển sang phông nền [Hoang_hon v] phát thông báo [an_het_nut v] nói [Bạn đã tìm được lối về!] trong [4] giây phát tiếng [chiến_thắng v]
Nút "Chơi lại" khi nhấn: phát thông báo [bat_dau] — reset biến và quay về cảnh 1.
Mở rộng cho lớp 8
Vật phẩm: biến co_chia_khoa — chỉ mở nhánh "cửa khóa" nếu đã nhặt chìa ở nhánh trước.
Danh sách: list nhat_ky ghi lại mỗi lựa chọn; cuối game đọc lại "nhật ký hành trình".
Hiệu ứng hover: khi chuột đè lên nút, tăng độ sáng — gợi ý có thể bấm.
Nhánh ẩn: nút chỉ hiện khi màn = 3 và điểm_tin_cậy > 15.
📌 Chủ đề gợi ý
Điều tra vụ án nhỏ trong trường — 3 nghi phạm, 4 kết.
Hành trình xuyên thời gian — mỗi thời đại một phông nền.
Truyện giáo dục môi trường — lựa chọn ảnh hưởng thiên nhiên.
Kiểm tra và hoàn thiện
Cờ xanh: cảnh mở đầu đúng, đúng nút hiện.
Bấm từng lựa chọn — phông nền và thoại đổi đúng nhánh.
Không còn nút cảnh cũ sau khi chuyển cảnh.
Mọi nhánh đều dẫn tới một kết cục — không có "đường cụt".
Chơi lại từ đầu — biến reset về giá trị ban đầu.
Nhờ bạn chơi thử — cốt truyện có dễ hiểu không?
💡 Ghi nhớ
Truyện nhiều nhánh dạy bạn thiết kế hệ thống: sơ đồ, trạng thái, sự kiện — giống kiến trúc phần mềm thu nhỏ. Đây là nền tảng tốt cho chatbot, game RPG và ứng dụng web tương tác sau này.